package com.fintech.common.utils;

import com.fintech.common.constant.DbOperateType;
import com.fintech.common.util.PropertiesUtils;
import com.marvels.common.utils.MarvelsLogUtil;

/**
 * DB操作工具类
 * 
 * @author tux
 *
 */
public class DbOperateUtils {
	/**
	 * DB操作类型KEY值
	 */
	private static final String DB_OPERATE_TYPE_KEY = "db.operate.type";

	private static String getBbOperateType() {
		return PropertiesUtils.getString(DB_OPERATE_TYPE_KEY);
	}

	/**
	 * 是否入MYSQL库
	 * 
	 * @return true：是 false：否
	 */
	public static boolean isInMysql() {
		return isInMysql(getBbOperateType());
	}

	/**
	 * 是否入MYSQL库
	 * 
	 * @param dbOperateType
	 *            DB操作类型
	 * @return true：是 false：否
	 */
	public static boolean isInMysql(String dbOperateType) {
		if (DbOperateType.IN_MYSQL_OUT_MYSQL.getCode().equals(dbOperateType)
				|| DbOperateType.IN_ALL_OUT_MYSQL.getCode().equals(dbOperateType)
				|| DbOperateType.IN_ALL_OUT_MONGODB.getCode().equals(dbOperateType)) {
			MarvelsLogUtil.getInstance().info("存储到MYSQL数据库");
			return true;
		}
		MarvelsLogUtil.getInstance().info("不存储到MYSQL数据库");
		return false;
	}

	/**
	 * 是否入MONGODB库
	 * 
	 * @return true：是 false：否
	 */
	public static boolean isInMongodb() {
		return isInMongodb(getBbOperateType());
	}

	/**
	 * 是否入MONGODB库
	 * 
	 * @param dbOperateType
	 *            DB操作类型
	 * @return true：是 false：否
	 */
	public static boolean isInMongodb(String dbOperateType) {
		if (DbOperateType.IN_MONGODB_OUT_MONGODB.getCode().equals(dbOperateType)
				|| DbOperateType.IN_ALL_OUT_MYSQL.getCode().equals(dbOperateType)
				|| DbOperateType.IN_ALL_OUT_MONGODB.getCode().equals(dbOperateType)) {
			MarvelsLogUtil.getInstance().info("存储到MONGODB数据库");
			return true;
		}
		MarvelsLogUtil.getInstance().info("不存储到MONGODB数据库");
		return false;
	}

	/**
	 * 入库操作异常时，是否需要抛出， 以下情况需要抛出异常：<BR>
	 * 1.只入MONGODB，只查询MONGODB<BR>
	 * 2.只入MYSQL，只查询MYSQL<BR>
	 * 
	 * @return true：是 false：否
	 */
	public static boolean isThrowException() {
		return isThrowException(getBbOperateType());
	}

	/**
	 * 入库操作异常时，是否需要抛出， 以下情况需要抛出异常：<BR>
	 * 1.只入MONGODB，只查询MONGODB<BR>
	 * 2.只入MYSQL，只查询MYSQL<BR>
	 * 
	 * @param dbOperateType
	 *            DB操作类型
	 * @return true：是 false：否
	 */
	public static boolean isThrowException(String dbOperateType) {
		if (DbOperateType.IN_MYSQL_OUT_MYSQL.getCode().equals(dbOperateType)
				|| DbOperateType.IN_MONGODB_OUT_MONGODB.getCode().equals(dbOperateType)) {
			MarvelsLogUtil.getInstance().info("入库处理时，出现异常需要抛出");
			return true;
		}
		MarvelsLogUtil.getInstance().info("入库处理时，出现异常不需要抛出");
		return false;
	}

	/**
	 * 是否通过MONGODB来查询数据
	 * 
	 * @return true：是 false：否
	 */
	public static boolean isOutByMongodb() {
		return isOutByMongodb(getBbOperateType());
	}

	/**
	 * 是否通过MONGODB来查询数据
	 * 
	 * @param dbOperateType
	 *            DB操作类型
	 * @return true：是 false：否
	 */
	public static boolean isOutByMongodb(String dbOperateType) {
		if (DbOperateType.IN_MONGODB_OUT_MONGODB.getCode().equals(dbOperateType)
				|| DbOperateType.IN_ALL_OUT_MONGODB.getCode().equals(dbOperateType)) {
			MarvelsLogUtil.getInstance().info("通过MONGODB来查询数据");
			return true;
		}
		MarvelsLogUtil.getInstance().info("不通过MONGODB来查询数据");
		return false;
	}

	public static void main(String[] args) {
		System.out.println(isOutByMongodb("3"));
	}

}
